package pruebasUnitarias.pruebasPatronesMovimiento;

import juego.Escenario;
import movimiento.*;
import movimiento.patrones.IdasVueltas;
import org.junit.*;
import auxiliares.Vector;

public class IdasVueltasTest {
	private PatronMovimiento movimiento;
	private Posicion posInicialLimiteSup, posInicialLimiteInf;
	private Posicion posIntermediaLimiteSup, posIntermediaLimiteInf;
	private Posicion posFinalLimiteSup, posFinalLimiteInf;
	private Vector velocidadLimiteInf, velocidadLimiteSup;

	@Before
	public void setUp() {
		Escenario.getInstance().setMaxX(100);
		Escenario.getInstance().setMaxY(100);
		movimiento = new IdasVueltas();
		posInicialLimiteInf = new Posicion(50, Escenario.getInstance()
				.getMaxY() - 3);
		posIntermediaLimiteInf = new Posicion(50, Escenario.getInstance()
				.getMaxY() - 1);
		posFinalLimiteInf = new Posicion(50,
				Escenario.getInstance().getMaxY() - 3);
		posInicialLimiteSup = new Posicion(50, 3);
		posIntermediaLimiteSup = new Posicion(50, 1);
		posFinalLimiteSup = new Posicion(50, 3);
		velocidadLimiteSup = new Vector(0, 2);
		velocidadLimiteInf = new Vector(0, -2);
	}

	@Test
	public void testLLegarLimiteInf() {
		Posicion posRetorno;
		posRetorno = movimiento.calcularNuevaPosicion(posInicialLimiteInf,
				velocidadLimiteSup);
		Assert.assertTrue(posRetorno.equals(posIntermediaLimiteInf));
		posRetorno = movimiento.calcularNuevaPosicion(posRetorno,
				velocidadLimiteSup);
		Assert.assertTrue(velocidadLimiteSup.getComponenteY() == -2);
		Assert.assertTrue(posRetorno.equals(posFinalLimiteInf));

		System.out
				.println("El movimiento idas y vueltas funciona bien al llegar abajo");
	}

	@Test
	public void testLLegarLimiteSup() {
		Posicion posRetorno;
		posRetorno = movimiento.calcularNuevaPosicion(posInicialLimiteSup,
				velocidadLimiteInf);
		Assert.assertTrue(posRetorno.equals(posIntermediaLimiteSup));
		posRetorno = movimiento.calcularNuevaPosicion(posRetorno,
				velocidadLimiteInf);
		Assert.assertTrue(velocidadLimiteSup.getComponenteY() == 2);
		Assert.assertTrue(posRetorno.equals(posFinalLimiteSup));

		System.out
				.println("El movimiento idas y vueltas funciona bien al llegar arriba");
	}

}
